java 字符串split有很多坑,使用时请小心!!

您所在的位置:网站首页 Line 的split bill java 字符串split有很多坑,使用时请小心!!

java 字符串split有很多坑,使用时请小心!!

2024-07-10 11:44| 来源: 网络整理| 查看: 265

System.out.println(":ab:cd:ef::".split(":").length);//末尾分隔符全部忽略 System.out.println(":ab:cd:ef::".split(":",-1).length);//不忽略任何一个分隔符 System.out.println(StringUtils.split(":ab:cd:ef::",":").length);//最前面的和末尾的分隔符全部都忽略,apache commons System.out.println(StringUtils.splitPreserveAllTokens(":ab:cd:ef::",":").length);//不忽略任何一个分隔符 apache commons 输出: 4 6 3 6

看了下jdk里String类的public String[] split(String regex,int limit)方法,感觉平时不太会用这方法,以为在用正则表达式来拆分时候,如果匹配到的字符是最后一个字符时,会拆分出两个空字符串,例 如"o"split("o",5) or "o"split("o",-2)时候 结果是"" "" 也就是下图中红框里的内容,所以平时一般都用split(String regex) 方法,其实也就等同于split(String regex,0)方法,把结尾的空字符串丢弃!

String的split方法用到的参数是一个正则式,虽然强大,但是有时候容易出 错。而且string并没有提供简化版本。org.apache.commons.lang.StringUtils提供的split改变了这一状况,开 始使用完整的字符串作为参数,而不是regex。同时,对类似功能的jdk版本的StringTokenizer,在内部方法splitWorker中有 段注释:Direct code is quicker than StringTokenizer.也就是说,这个是更快的一个工具了~~

StringUtils里的split和splitPreserveAllTokens 底层都是调用splitWorker方法实现的 下面分别来理解下两个私有的splitWorker方法:

 

private static String[] splitWorker(String str, char separatorChar, boolean preserveAllTokens) { // Performance tuned for 2.0 (JDK1.4) if (str == null) { return null; } int len = str.length(); if (len == 0) { return ArrayUtils.EMPTY_STRING_ARRAY; } List list = new ArrayList(); int i = 0, start = 0; boolean match = false; boolean lastMatch = false; while (i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3